﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ecommerce.Pagamento.CartaoCredito
{
    /// <summary>
    /// Exceção disparada quando acontece algum erro durante a autorização ou confirmação de um pagamento
    /// </summary>
    [Serializable]
    public class PagamentoRedecardException : Exception
    {
        private int _codigoErro;

        public int CodigoErro
        {
            get
            {
                return _codigoErro;
            }
        }

        private PagamentoRedecardTipoTransacaoErro _tipoTransacaoErro;

        public PagamentoRedecardTipoTransacaoErro TipoTransacaoErro
        {
            get
            {
                return _tipoTransacaoErro;
            }
        }

        /// <summary>
        /// Inicializa uma nova instancia de WebPartner.Redecard.PagamentoRedecardException.
        /// </summary>
        /// <param name="codigoErro">Codigo do erro gerado pela redecard</param>
        /// <param name="tipoTransacaoErro">Se o erro ocorreu durante a autorização ou transação</param>
        /// <param name="mensagem">Mensagem de erro</param>
        public PagamentoRedecardException(int codigoErro, PagamentoRedecardTipoTransacaoErro tipoTransacaoErro, string mensagem)
            : base(mensagem)
        {
            _codigoErro = codigoErro;
            _tipoTransacaoErro = tipoTransacaoErro;
        }

        /// <summary>
        /// Inicializa uma nova instancia de WebPartner.Redecard.PagamentoRedecardException
        /// </summary>
        /// <param name="codigoErro">Codigo do erro gerado pela redecard</param>
        /// <param name="tipoTransacaoErro">Se o erro ocorreu durante a autorização ou transação</param>
        /// <param name="mensagem">Mensagem de erro</param>
        /// <param name="innerException">innerException</param>
        public PagamentoRedecardException(int codigoErro, PagamentoRedecardTipoTransacaoErro tipoTransacaoErro, string mensagem, Exception innerException)
            : base(mensagem, innerException)
        {
            _codigoErro = codigoErro;
            _tipoTransacaoErro = tipoTransacaoErro;
        } 
    }

    /// <summary>
    /// Tipos de exceções que podem ser geradas
    /// </summary>
    public enum PagamentoRedecardTipoTransacaoErro
    {
        Autorizacao = 0,
        ConfirmarTransacao,
        ValidacaoObjetoAutorizacao,
        GeracaoCupom
    }
}